Parallelizing and Vectorizing Compilers

نویسندگان

  • Rudolf Eigenmann
  • Jay Hoeflinger
چکیده

Programming computers is a complex and constantly evolving activity. Technological innovations have consistently increased the speed and complexity of computers, making programming them more difficult. To ease the programming burden, computer languages have been developed. A programming language employs syntactic forms that express the concepts of the language. Programming language concepts have evolved over time, as well. At first the concepts were centered on the computing machine being used. Gradually, the concepts of computer languages have evolved away from the machine, toward problem-solving abstractions. Computer languages require translators, called compilers, to translate programs into a form that the computing machine can use directly, called machine language. The part of a computer that does arithmetical or logical operations is called the processor. Processors execute instructions, that determine the operation to perform. An instruction that does arithmetic on one or two numbers at a time is called a scalar instruction. An instruction that operates on a larger number of values at once (e.g. 32 or 64) is called a vector instruction. A processor that contains no vector instructions is called a scalar processor and one that contains vector instructions is called a vector processor. If the machine has more than one processor of either type, it is called a multiprocessor or a parallel computer. The first computers were actually programmed by connecting components with wires. This was a tedious task and very error prone. If an error in the wiring was made, the programmer had to visually inspect the wiring to find the wrong connection. The innovation of stored-program computers eliminated the physical wiring job. The stored-program computer contained a memory device that could store a series of binary digits (1s and 0s), a processing device that could carry out several operations, and devices for communicating to the outside world (input/output devices). An instruction for this kind of computer consisted of a numeric code indicating which operation to carry out, as well as an indication of the operands to which the operation was applied. Debugging such a machine language program involved inspecting memory and finding the binary digits that were loaded incorrectly. This could be tedious and time-consuming. Then another innovation was introduced symbolic assembly language and a assembler program to translate assembly language programs into machine language. Programs could be written using names for memory locations and registers. This eased the programming burden considerably, but people still had to manage a group of registers, had to check status bits within the processor, and keep track of other machine-related hardware. Though the problems changed somewhat, debugging was still tedious and time-consuming. A new pair of innovations was required to lessen the onerous attention to machine details a new language (Fortran), closer to the domain of the problems being solved, and a program for translating Fortran programs into machine code, a Fortran compiler. The 1954 Preliminary Report on Fortran stated that “. . . Fortran should virtually eliminate coding and debugging . . . ”. That prediction, unfortunately, did not come true, but the Fortran compiler was an undeniable step forward, in that it eliminated much complexity from the programming process. The programmer was freed from managing the way machine registers were employed and many other details of the machine architecture. The authors of the first Fortran compiler recognized that in order for Fortran to be accepted by programmers, the code generated by the Fortran compiler had to be nearly as efficient as code written in assembly language. This required sophisticated analysis of the program, and optimizations to avoid unnecessary operations. Programs written for execution by a single processor are referred to as serial, or sequential programs. When the quest for increased speed produced com-

برای دانلود متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

منابع مشابه

Evaluation of Parallelizing Compilers

The recognition and exploitation of parallelism is a diicult problem for restructuring compilers. We present a method for evaluating the eeectiveness of parallelizing compilers in general and of speciic compiler techniques. We also report two groups of measurements that are the results of using this technique. One evaluates a commercially available parallelizer, KAP/Concurrent, and the other co...

متن کامل

Polaris: Improving the Effectiveness of Parallelizing Compilers

It is the goal of the Polaris project to develop a new parallelizing compiler that will overcome limitations of current compilers. While current parallelizing compilers may succeed on small kernels, they often fail to extract any meaningful parallelism from large applications. After a study of application codes, it was concluded that by adding a few new techniques to current compilers, automati...

متن کامل

Parallel loops - a test suite for parallelizing compilers: description and example results

Several multiprocessor systems are now commercially available, and advances in compiler technology provide automatic conversion of programs to run on such systems. However, no accepted measure of this parallel compiler ability exists. This paper presents a test suite of subroutines and loops, called Parallel Loops, designed to (1) measure the ability of parallelizing compilers to convert code t...

متن کامل

Oil and Water can mix! Experiences with integrating Polyhedral and AST-based Transformations

The polyhedral model is an algebraic framework for affine program representations and transformations for enhancing locality and parallelism. Compared with traditional AST-based transformation frameworks, the polyhedral model can easily handle imperfectly nested loops and complex data dependences within and across loop nests in a unified framework. On the other hand, AST-based transformation fr...

متن کامل

The Accuracy of the Non-continuous I Test for One- Dimensional Arrays with References Created by Induction Variables

One-dimensional arrays with subscripts formed by induction variables in real programs appear quite frequently. For most famous data dependence testing methods, checking if integer-valued solutions exist for one-dimensional arrays with references created by induction variable is very difficult. The I test, which is a refined combination of the GCD and Banerjee tests, is an efficient and precise ...

متن کامل

A Formal Approach to Parallelizing Compilers

This paper describes parallelizing compilers which allow programmers to tune parallel program performance through an interactive dialog. Programmers specify language constructs that define sequential processes, such as assignment or for-loops, to be used as units of computation, while the compiler discovers the parallelism existent in the source program in terms of these units. Programmers may ...

متن کامل

ذخیره در منابع من


  با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید

برای دانلود متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

عنوان ژورنال:

دوره   شماره 

صفحات  -

تاریخ انتشار 2000